#include <iostream>
#include <string>
#include <jsoncpp/json/json.h> // 注意这里的路径，通常是 json/json.h

int main()
{
    // // 序列化示例
    // Json::Value root;
    // root["name"] = "Alice";
    // root["age"] = 30;
    // root["isStudent"] = false;

    // Json::Value courses(Json::arrayValue);
    // courses.append("Math");
    // courses.append("Physics");
    // root["courses"] = courses;

    // Json::StreamWriterBuilder writerBuilder;
    // std::string json_output = Json::writeString(writerBuilder, root);
    // std::cout << "Serialized JSON:\n" << json_output << std::endl;

    // // 反序列化示例
    // std::string json_input = R"({"name":"Bob", "age":25, "city":"New York"})";
    // Json::CharReaderBuilder readerBuilder;
    // Json::CharReader* reader = readerBuilder.newCharReader();
    // Json::Value parsedRoot;
    // std::string errors;

    // bool parsingSuccessful = reader->parse(json_input.data(), json_input.data() + json_input.size(), &parsedRoot, &errors);
    // delete reader; // 记得释放内存

    // Json::Value root;      // 创建一个空的 Json::Value 对象
    // root["name"] = "张三"; // 添加字符串类型的成员
    // root["sex"] = "男";
    // root["age"] = 18; // 添加整数类型的成员

    // Json::Value sub; // 创建另一个 Json::Value 对象作为嵌套对象
    // sub["tel"] = "12345";
    // sub["籍贯"] = "XXX";
    // root["info"] = sub; // 将 sub 对象添加到 root 的 "info" 成员中

    //--------------------------博客测试------------------------------------------------------

    std::string json_string = "{\"name\":\"张三\", \"age\":30, \"city\":\"北京\"}";
    Json::Value root;
    Json::Reader reader;                       // 声明一个解析器对象
    bool ok = reader.parse(json_string, root); // 调用 parse 方法进行解析
    (void)ok;                                  // 忽略返回值，但在实际中应检查其是否为 true

    // std::string name = root["name"].asString(); // 将 "name" 成员的值转换为 std::string
    // int age = root["age"].asInt();              // 将 "age" 成员的值转换为 int
    // std::string city = root["city"].asString(); // 将 "city" 成员的值转换为 std::string

    // std::cout << root << std::endl;

    // std::cout << name << std::endl;
    // std::cout << age << std::endl;
    // std::cout << city << std::endl;

    // Json::FastWriter writer;            // 声明一个 FastWriter 对象
    // std::string s = writer.write(root); // 调用 write 方法进行序列化
    // std::cout << s << std::endl;        // 输出紧凑的 JSON 字符串

    // Json::StyledWriter writer;          // 声明一个 StyledWriter 对象
    // std::string s = writer.write(root); // 调用 write 方法进行序列化
    // std::cout << s << std::endl;        // 输出格式化的 JSON 字符串

    // Json::StreamWriterBuilder sbuilder;                                     // 声明一个 StreamWriterBuilder
    // std::unique_ptr<Json::StreamWriter> writer(sbuilder.newStreamWriter()); // 通过 builder 创建一个 StreamWriter
    // std::stringstream ss;                                                   // 创建一个字符串流
    // writer->write(root, &ss);                                               // 将 JSON 写入字符串流
    // std::string s = ss.str();                                               // 从字符串流中获取最终的 JSON 字符串
    // std::cout << s << std::endl;

    // Json::StreamWriterBuilder writerbuilder;
    // std::unique_ptr<Json::StreamWriter> writer(writerbuilder.newStreamWriter());

    // std::stringstream ss;
    // writer->write(root, &ss);

    // std::string s = ss.str();



    std::string s = root.toStyledString(); // 直接调用 toStyledString() 方法
    std::cout << s << std::endl;           // 输出格式化的 JSON 字符串

    return 0;
}